package co.gov.medellin.ssti.sub.model.service;

import java.sql.SQLException;
import java.util.Collection;
import java.util.List;

import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.vo.AtributoVO;
import co.gov.medellin.ssti.sub.model.vo.SubprogramaVO;
import co.gov.medellin.ssti.sub.web.form.SubprogramaForm;

public interface SubprogramaService {
	/**
	 * 
	 * @return
	 */
	List<SubprogramaVO> loadAllSubprogramas() throws DAOException;

	/**
	 * 
	 * @param programaCode
	 * @return
	 */
	List<SubprogramaVO> loadAllSubprogramasByPrograma(String programaCode)
			throws DAOException;

	/**
	 * 
	 * @param codeSubprograma
	 * @return
	 */
	AtributoVO getGestor(String codeSubprograma) throws DAOException;

	/**
	 * 
	 * @param criterea
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findSubprogramaByCriteria(SubprogramaVO criteria)
			throws DAOException;

	/**
	 * 
	 * @param criteria
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findInformacionSubprogramaByCriteria(
			SubprogramaVO criteria) throws DAOException;

	/**
	 * 
	 * @param criteria
	 * @param codeUser
	 * @param groupUserName
	 * @param areaUser
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findSubprogramaByCriteria(SubprogramaVO criteria,
			Long codeUser, String groupUserName, Long areaUser)
			throws DAOException;

	/**
	 * 
	 * @param criteria
	 * @param codeUser
	 * @param groupUserName
	 * @param areaUser
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findAllowedSubprogramaWithGestorByCriteria(
			SubprogramaVO criteria, Long codeUser, String groupUserName,
			Long areaUser) throws DAOException;

	/**
	 * 
	 * @param criteria
	 * @param codeUser
	 * @param groupUserName
	 * @param areaUser
	 * @return
	 * @throws SQLException
	 */
	Collection<SubprogramaVO> findSubprograma(SubprogramaVO criteria,
			Long codeUser, String groupUserName, Long areaUser)
			throws DAOException;

	/**
	 * 
	 * @param codeUser
	 * @param userGroupName
	 * @param codeprograma
	 * @param codeArea
	 * @return
	 */
	Collection<SubprogramaVO> findSubprogramaUser(Long codeUser,
			String userGroupName, Long codeprograma, Long codeArea);

	/**
	 * 
	 * @param criterea
	 * @param codeUser
	 * @param groupUserName
	 * @param areaUser
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findAllowedSubprograma(SubprogramaVO criteria,
			Long codeUser, String groupUserName, Long areaUser)
			throws DAOException;

	/**
	 * RESP. BENEFICIODAO
	 * 
	 * @param strArr
	 * @param i
	 * @param fechaBeneficio
	 * @return
	 * 
	 */
	int insertBeneficioOtorgado(String strArr[], int i, String fechaBeneficio)
			throws DAOException;

	/**
	 * RESP. BENEFICIODAO.
	 * 
	 * @param strArr
	 * @param i
	 * @param DateBenefit
	 * @param codeBot
	 * @return
	 * 
	 */
	int updateBeneficioOtorgado(String strArr[], int i, String DateBenefit,
			String codeBot) throws DAOException;

	/**
	 * RESP. BENEFICIODAO.
	 * 
	 * @param strArr
	 * @param i
	 * @param DateBenefit
	 * @param codeBot
	 * @param tipoBot
	 * @return
	 * 
	 */
	int updateBeneficioOtorgado(String strArr[], int i, String DateBenefit,
			String codeBot, String tipoBot, Long codigoHechoVictimizante)
			throws DAOException;

	/**
	 * 
	 * @param codeSubpro
	 * @return
	 * 
	 */
	SubprogramaVO findPropiedadesSubprograma(long codeSubpro);

	/**
	 * RESP. BENEFICIODAO.
	 * 
	 * @return
	 * 
	 */
	String findCodMaxBenOtor();

	/**
	 * NOT EVEN USED. RESP. BENEFICIODAO.
	 * 
	 * @return
	 * 
	 */
	String findCantidadDisponible();

	/**
	 * 
	 * @return
	 * 
	 */
	String findMaxCodigo();

	/**
	 * FORM EN DAO???
	 * 
	 * @param subform
	 * @param user
	 * @param strTerminal
	 * @param strDate
	 * @return
	 * 
	 */
	int insertBeneficio(SubprogramaForm subform, String user,
			String strTerminal, String strDate);

	/**
	 * 
	 * @param codigo
	 * @return
	 * 
	 */
	boolean findEstadoSubprogramaByCodigo(long codigo);

	/**
	 * ...
	 * 
	 * @param codePrograma
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findActivarSubprogramas(long codePrograma);

	/**
	 * 
	 * @param codeUser
	 * @param groupUserName
	 * @param areaUser
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findActivarSubprogramas(Long codeUser,
			String groupUserName, Long areaUser);

	/**
	 * 
	 * @param criteria
	 * @param codeUser
	 * @param groupUserName
	 * @param areaUser
	 * @return
	 * 
	 */
	Collection<SubprogramaVO> findSubprogramasVigentes(SubprogramaVO criteria,
			Long codeUser, String groupUserName, Long areaUser);

	/**
	 * 
	 * @param strCodeSub
	 * @return
	 * 
	 */
	String findNombreByCodigo(long codeSub);

	/**
	 * 
	 * @param codeBOT
	 * @return
	 * 
	 */
	String findCodigoSubprogramaByCodigoBOT(long codeBOT);

	/**
	 * 
	 * @param codeSub
	 * @return
	 * 
	 */
	boolean isRelacionadoConSede(long codeSub);

	/**
	 * 
	 * @param codeSubprograma
	 * @return
	 * 
	 */
	String findCodigoProgramaByCodigoSubprograma(long codeSubprograma);

	/**
	 * Metodo que consulta en TCS_BEN_SUBPROGRAMA el subprograma con codigo =
	 * codeSubprograma y grupo_familiar = 'S' para determinar si el beneficio es
	 * para un grupo familiar.
	 * 
	 * @param codeSubprograma
	 * @return
	 * 
	 */
	boolean isSubprogramaParaGrupoFamiliar(Long codeSubprograma);

	/**
	 * 
	 * @param codeSubprograma
	 * @return
	 */
	SubprogramaVO findSubprogramaByCodigo(Long codeSubprograma);

	int insertBeneficioOtorgadoEmpresa(String strArr[], int i,
			String fechaBeneficio) throws DAOException;

	int inactivarSubprograma(SubprogramaVO subprogramaVO);

	Collection<SubprogramaVO> findCodeSubprogramasByCodePrograma(
			Long codePrograma);

	int update(SubprogramaVO subprogramaVO);
}
